<?php
class Model_Product extends Zend_Db_Table_Abstract
{
    protected $_name = 'product';

    public function getPaginator($filters = array(), $sort = null, $page = 1, $rowCount = null)
    {
        // get select query
        $select = $this->select ();
        if ($filters != null)
        {
            if (is_array ( $filters ))
            {
                foreach ( $filters as $key => $val )
                    $select->where ( $key, $val );
            }
            else
            {
                $select->where ( $filters );
            }
        }
        
        if ($sort != null)
            $select->order ( $sort );
            
        // get adapter
        $adapter = new Zend_Paginator_Adapter_DbTableSelect ( $select );
        
        // get paginator
        $paginator = new Zend_Paginator ( $adapter );
        $paginator->setItemCountPerPage ( $rowCount );
        $paginator->setCurrentPageNumber ( $page );
        
        return $paginator;
    }

    public function getList($filters = array(), $sort = null, $page = null, $rowCount = null)
    { 
        $select = $this->select ();
        if ($filters != null)
        {
            if (is_array ( $filters ))
            {
                foreach ( $filters as $key => $val )
                    $select->where ( $key, $val );
            }
            else
            {
                $select->where ( $filters );
            }
        }
        
        if ($page != null)
            $select->limitPage ( $page, $rowCount );
        
        if ($sort != null)
            $select->order ( $sort );
            
        return $this->fetchAll ( $select );
    }
    
    public function createProduct($name, $dimID, $catID, $color, $price, $quantity, $description, $mainImage) 
    {
    	// create a new row in the table
    	$row = $this->createRow ();
    	
    	// set the row data
    	$row->name = $name;
    	$row->dim_id = $dimID;
    	$row->cat_id = $catID;
    	$row->color = $color;
    	$row->price = $price;
    	$row->quantity = $quantity;
    	$row->description = $description;
    	$row->main_image = $mainImage;
    	
    	// save the new row
    	$row->save ();
    	
    	// now fetch the id of the row you just created and return it
    	$id = $row->product_id; //$this->_db->lastInsertId();
    	return $id;
    }
    
    public function updateProduct($productID, $name, $dimID, $catID, $color, $price, $quantity, $description, $mainImage)
    {
    	// find the row that matches the id
    	$row = $this->find ( $productID )->current ();
    	if ($row)
    	{
    		// set the row data
    		$row->name = $name;
    		$row->dim_id = $dimID;
    		$row->cat_id = $catID;
    		$row->color = $color;
    		$row->price = $price;
    		$row->quantity = $quantity;
    		$row->description = $description;
    		if($mainImage) {
    			$row->main_image = $mainImage;
    		}
    		 
    		// save the new row
    		$row->save ();
    		return true;
    	}
    	else
    	{
    		throw new Zend_Exception ( "Update function failed; could not find row!" );
    	}
    }
    
    public function deleteProduct($id)
    {
    	// find the row that matches the id
    	$row = $this->find ( $id )->current ();
    	if ($row)
    	{
    		$row->delete ();
    		return true;
    	}
    	else
    	{
    		throw new Zend_Exception ( "Delete function failed; could not find row!" );
    	}
    }
    
    public function getListProductDetails()
    {
    	
    }
    
    public function findProduct($productID)
    {
    	$row = $this->find ( $productID )->current ();
    	if ($row)
    	{
    		return $row->toArray();
    	}
    	else
    	{
    		throw new Zend_Exception ( "Could not find row!" );
    	}
    }
}